package com.ler.yrmall.coupon.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ler.yrmall.basic.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @author Leron
 */
@Data
@TableName("sms_coupon")
@EqualsAndHashCode(callSuper = true)
public class CouponEntity extends BaseEntity<CouponEntity> {

    /**
     * 优惠券类型 1 商品券 2 通用券
     * @see CouponType
     */
    private Integer type;

    /**
     * 模板编码
     */
    private String templateCode;

    /**
     * 优惠券名称
     */
    private String name;

    /**
     * 是否开启总量限制
     */
    private Integer isLimited;

    /**
     * 总数量
     */
    private Integer num;

    /**
     * 金额
     */
    private BigDecimal amount;

    /**
     * 每人限制领取数量
     */
    private Integer limited;

    /**
     * 最小限制
     */
    private BigDecimal minPoint;

    /**
     * 开放领取时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**
     * 结束领取时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    /**
     * 领取方式
     * @see ReceiveType
     */
    private Integer receiveType;

    /**
     * 备注
     */
    private String remark;

    /**
     * 限制会员等级
     */
    private Integer memberLevel;

    /**
     * 发布状态
     */
    private Integer status;

    public enum CouponType {

        /**
         * 商品券
         */
        PRODUCT(1),

        /**
         * 普通券
         */
        COMMON(2);

        private final Integer code;

        CouponType(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }
    }

    public enum ReceiveType {

        /**
         * 自动
         */
        AUTO_RECEIVE(1),

        /**
         * 手动
         */
        HAND_RECEIVE(2);

        private final Integer code;

        ReceiveType(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }
    }

}
